package com.smartleanx.module.hrm.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**
 * @author guo
 */
public class DateUtil {

    /**
     * 当前时间加*分钟数
     *
     * @param minuteNum 分钟数
     * @return
     */
    public static Date reduceMinute(Integer minuteNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.MINUTE, -minuteNum);
        Date newTime = calendar.getTime();
        return newTime;
    }

    /**
     * 时间加十五分钟
     */
    public static String dateFormat() {
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();

        // 增加15分钟
        LocalDateTime plus15Minutes = now.plusMinutes(15);

        // 创建一个DateTimeFormatter对象来定义日期时间的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 将增加15分钟后的时间转换为字符串
        String formattedDateTime = plus15Minutes.format(formatter);

        // 输出结果
        System.out.println("当前时间: " + now.format(formatter));
        System.out.println("增加15分钟后的时间（字符串）: " + formattedDateTime);
        return formattedDateTime;
    }


    /**
     * 时间加十五分钟
     */
    public static String dateFormatByAddMinute(Long minute) {
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();

        // 增加15分钟
        LocalDateTime plus15Minutes = now.plusMinutes(minute);

        // 创建一个DateTimeFormatter对象来定义日期时间的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 将增加15分钟后的时间转换为字符串
        String formattedDateTime = plus15Minutes.format(formatter);

        // 输出结果
        System.out.println("当前时间: " + now.format(formatter));
        System.out.println("增加15分钟后的时间（字符串）: " + formattedDateTime);
        return formattedDateTime;
    }

    public static String currentDateFormat() {
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();
        // 创建一个DateTimeFormatter对象来定义日期时间的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        final String format = now.format(formatter);
        // 输出结果
        System.out.println("当前时间: " + now.format(formatter));
        return format;
    }

    /**
     * 传入时间据当前时间相差几个月
     */
    public static Integer dateTimeFormat(String date) {
        Integer month = 0;
        LocalDateTime specifiedDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        // 当前时间
        LocalDateTime now = LocalDateTime.now();
        // 计算两个时间之间的月数
        Period period = Period.between(specifiedDateTime.toLocalDate(), now.toLocalDate());
        if (period.getMonths() == 0) {
            month = 1;
        } else {
            month = period.getMonths();
        }
        return month;
    }


    public static String longToString(long time) {
        Date date = longToDate(time);
        String strTime = dateToString(date, "yyyy-MM-dd HH:mm:ss");
        return strTime;
    }


    public static Date stringToDate(String strTime) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = formatter.parse(strTime);
        } catch (ParseException e) {

            e.printStackTrace();
        }
        return date;
    }

//    public static String formatYear(String time, Integer year) {
//        LocalDate now = LocalDate.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//        LocalDate plus = now.plusYears(year).plusDays(-1);
//        return plus.toString();
//    }
//
//    public static Long formatYearByLong(String time, Integer year) {
//        LocalDate now = LocalDate.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//        LocalDate plus = now.plusYears(year).plusDays(-1);
//        return plus.toEpochDay();
//    }


    public static String wxSuccessTimeParseStr(String time) {


        // 1. 解析为 OffsetDateTime
        OffsetDateTime dateTime = OffsetDateTime.parse(time);

        // 2. 创建目标格式的格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 3. 格式化为字符串（保持原始时间值）
        String formattedDateTime = dateTime.format(formatter);

        System.out.println("转换结果: " + formattedDateTime);
        return formattedDateTime;
    }

    public static Date longToDate(long currentTime) {
        Date dateOld = new Date(currentTime);
        String sDateTime = dateToString(dateOld, "yyyy-MM-dd HH:mm:ss");
        Date date = stringToDate(sDateTime);
        return date;
    }

    public static String dateToString(Date data, String formatType) {
        return new SimpleDateFormat(formatType).format(data);
    }


    public static String localDataParseStr(LocalDate localDate) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy-MM-dd");

        // 格式化日期并打印
        String formattedDate = localDate.format(formatter);
        System.out.println(formattedDate);
        return formattedDate;
    }

    public static void main(String[] args) throws ParseException {

        System.err.println(wxSuccessTimeParseStr("2025-07-16T14:19:53+08:00"));
    }
}
